﻿// Fill out your copyright notice in the Description page of Project Settings.

#pragma once

#include "CoreMinimal.h"
#include "UObject/Object.h"
#include "UninstallResources.generated.h"

/**	卸载资源
 *		自动回收
 *			当对象失去饮用后会被自动释放。
 *			在异步回调结束后，对象会被标记可回收，此时使用 ForceGC 可销毁对象
 *		手动回收
 *			使用 FStreamableManager::Unload()
 *				LoadSynchronous()、RequestSyncLoad()、RequestAsyncLoad() 默认bManageActiveHandle 参数为false，表示自动管理内存；当设为true，表示常驻内存直到手动释放
 *				FStreamableManager::Unload()会Release掉和当前资源相关的所有FStreamableHandle
 *				编辑器模式下会一直常驻内存，打包版本中才会生效
 *			使用 FStreamableHandle::ReleaseHandle()
 *				异步加载时，如果资源还没加载完成就执行ReleaseHandle()（假设加载时bManageActiveHandle为true），比如在执行回调函数之前执行ReleaseHandle，那么当资源加载完成后（回调函数执行之后），会自动从内存中回收。不过该对象在回调函数中仍然有效，除非在回调函数内ForceGC。
 *				编辑器模式下会一直常驻内存，打包版本中才会生效
 *			使用 ConditionalBeginDestroy()
 *				编辑器模式下卸载后，对象从内存中销毁，无法再次Load，需要重启编辑器
 **/
UCLASS()
class MISCELLANEOUSPROJECT_API UUninstallResources : public UObject
{
	GENERATED_BODY()
public:
	void UnloadMethod(FSoftObjectPath AssetPath);
	void ReleaseHandleMethod(FSoftObjectPath AssetPath);
	void ConditionalBeginDestroyMethod();
};
